Functions এবং Closures - Swift এ মৌলিক ধারণা
Swift-এ ফাংশন এবং ক্লোজারস হলো কোডের পুনঃব্যবহারযোগ্য ব্লক যা নির্দিষ্ট কাজ সম্পন্ন করার জন্য ডিজাইন করা হয়েছে। ফাংশন হলো কোডের একটি নির্দিষ্ট অংশ যা একটি নির্দিষ্ট নাম দিয়ে ডিফাইন করা হয়, এবং ক্লোজার হলো একটি কোড ব্লক যা ফাংশনের মতো আচরণ করে কিন্তু এর কোনো নির্দিষ্ট নাম থাকতে হয় না। নিচে ফাংশন এবং ক্লোজারের বিস্তারিত ব্যাখ্যা দেওয়া হলো:
Functions
ফাংশন একটি কোড ব্লক যা একটি নির্দিষ্ট কাজ সম্পন্ন করে এবং পুনঃব্যবহারের জন্য সংরক্ষণ করা হয়। Swift-এ ফাংশন func কীওয়ার্ড ব্যবহার করে ঘোষণা করা হয়। ফাংশন ইনপুট প্যারামিটার এবং আউটপুট রিটার্ন টাইপ গ্রহণ করতে পারে।
ফাংশন সিনট্যাক্স:
func functionName(parameters) -> ReturnType {
// function body
// return statement (if necessary)
}
উদাহরণ ১: কোনো প্যারামিটার বা রিটার্ন টাইপ ছাড়া ফাংশন
func greet() {
print("Hello, Swift!")
}
greet() // আউটপুট: Hello, Swift!
উদাহরণ ২: প্যারামিটারসহ ফাংশন
func greet(name: String) {
print("Hello, \(name)!")
}
greet(name: "Alice") // আউটপুট: Hello, Alice!
উদাহরণ ৩: প্যারামিটার এবং রিটার্ন টাইপসহ ফাংশন
func add(a: Int, b: Int) -> Int {
return a + b
}
let result = add(a: 5, b: 3)
print(result) // আউটপুট: 8
প্যারামিটারস এবং আর্গুমেন্ট লেবেল
Swift-এ আপনি প্যারামিটারগুলির জন্য আর্গুমেন্ট লেবেল ব্যবহার করতে পারেন, যা ফাংশন কল করার সময় কোডটি আরও পাঠযোগ্য করে তোলে।
func multiply(number1 a: Int, number2 b: Int) -> Int {
return a * b
}
let product = multiply(number1: 4, number2: 5)
print(product) // আউটপুট: 20
ডিফল্ট প্যারামিটার মান
ফাংশন প্যারামিটারের জন্য ডিফল্ট মান সেট করা যায়, যাতে আর্গুমেন্ট না দিলেও ফাংশন কাজ করে।
func sayHello(to name: String = "Guest") {
print("Hello, \(name)!")
}
sayHello() // আউটপুট: Hello, Guest!
sayHello(to: "Bob") // আউটপুট: Hello, Bob!
ভ্যারিয়াডিক প্যারামিটার (Variadic Parameters)
একই ফাংশনে একাধিক মান পাস করার জন্য ভ্যারিয়াডিক প্যারামিটার ব্যবহার করা যায়। এটি একটি অ্যারে হিসেবে কাজ করে।
func sum(numbers: Int...) -> Int {
var total = 0
for number in numbers {
total += number
}
return total
}
let totalSum = sum(numbers: 1, 2, 3, 4, 5)
print(totalSum) // আউটপুট: 15
Closures
ক্লোজার Swift-এ ফাংশনের মতো একটি কোড ব্লক যা নামবিহীন হতে পারে এবং ভেরিয়েবল বা কনস্ট্যান্ট হিসেবে সংরক্ষণ করা যেতে পারে। এটি ফাংশনের মতো আচরণ করে এবং ফাংশনের মতোই প্যারামিটার এবং রিটার্ন টাইপ গ্রহণ করতে পারে। ক্লোজার ব্যবহার করা হয় এমন জায়গায় যেখানে ফাংশনের প্রয়োজন হয় কিন্তু নাম দেওয়ার প্রয়োজন নেই।
ক্লোজারের বেসিক সিনট্যাক্স:
{ (parameters) -> ReturnType in
// closure body
}
উদাহরণ ১: একটি সহজ ক্লোজার
let greetClosure = { (name: String) in
print("Hello, \(name)!")
}
greetClosure("Alice") // আউটপুট: Hello, Alice!
উদাহরণ ২: প্যারামিটার এবং রিটার্ন টাইপসহ ক্লোজার
let multiplyClosure = { (a: Int, b: Int) -> Int in
return a * b
}
let product = multiplyClosure(3, 4)
print(product) // আউটপুট: 12
ক্লোজার শর্টহ্যান্ড সিনট্যাক্স
Swift-এ ক্লোজার শর্টহ্যান্ড সিনট্যাক্স ব্যবহার করা যায়। এতে প্যারামিটার নাম সরাসরি $0, $1 এর মতো দিয়ে বোঝানো হয়।
let sumClosure: (Int, Int) -> Int = { $0 + $1 }
let sum = sumClosure(5, 7)
print(sum) // আউটপুট: 12
ক্লোজার অ্যারেগুলোর উপর অপারেশন হিসাবে ব্যবহার
let numbers = [1, 2, 3, 4, 5]
let doubledNumbers = numbers.map { $0 * 2 }
print(doubledNumbers) // আউটপুট: [2, 4, 6, 8, 10]
ট্রেলিং ক্লোজার সিনট্যাক্স
যদি ক্লোজার ফাংশনের শেষ প্যারামিটার হয়, তাহলে ট্রেলিং ক্লোজার সিনট্যাক্স ব্যবহার করা যায়, যা কোডের পাঠযোগ্যতা বাড়ায়।
func performOperation(a: Int, b: Int, operation: (Int, Int) -> Int) -> Int {
return operation(a, b)
}
let result = performOperation(a: 10, b: 5) { $0 - $1 }
print(result) // আউটপুট: 5
ক্লোজার ক্যাপচার (Closure Capture)
ক্লোজার তার আশেপাশের কনটেক্সট থেকে ভেরিয়েবল বা কনস্ট্যান্ট ধরে রাখতে পারে। এটিকে ক্যাপচারিং বলে।
func makeIncrementer(incrementAmount: Int) -> () -> Int {
var total = 0
let incrementer: () -> Int = {
total += incrementAmount
return total
}
return incrementer
}
let incrementByTwo = makeIncrementer(incrementAmount: 2)
print(incrementByTwo()) // আউটপুট: 2
print(incrementByTwo()) // আউটপুট: 4
Functions এবং Closures-এর মধ্যে পার্থক্য
- Functions: নামযুক্ত এবং পুনঃব্যবহারযোগ্য কোড ব্লক। এটি একটি নির্দিষ্ট নাম দিয়ে ডিফাইন করা হয়।
- Closures: নামবিহীন কোড ব্লক যা ভেরিয়েবল বা কনস্ট্যান্ট হিসেবে সংরক্ষণ করা যায় এবং এটি শর্টহ্যান্ড সিনট্যাক্সে লেখা যায়।
সারসংক্ষেপ
- Functions এবং Closures Swift প্রোগ্রামিং ভাষার একটি গুরুত্বপূর্ণ অংশ এবং এটি অ্যাপ্লিকেশন ডেভেলপমেন্টে কোড পুনঃব্যবহারের সুযোগ দেয়।
- ফাংশন এবং ক্লোজার বোঝা এবং সঠিকভাবে ব্যবহার করা Swift ডেভেলপমেন্টে দক্ষতা বাড়ায় এবং কোডিং প্রক্রিয়াকে আরও কার্যকরী করে তোলে।
Read more